home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
FORTH
/
FORTHMAC
/
OLD
/
TOOLS1
/
!Forthmacs.extend.stackcheck
< prev
next >
Wrap
Text File
|
1996-06-12
|
1KB
|
55 lines
\ Automatic checker for stack integrity.
\ Use as:
\ : name (s param -- param2 param3 param4 )
\ ...
\ ;
\ The (s counts parameters in the stack comment, and checks at run
\ time for the proper change in stack depth between the start of
\ the word and the end. Params must be separated by spaces.
\ '--' and ')' must be spelled as shown and separated by spaces.
\
\ This feature is enabled or disabled with:
\ stackcheck on -or- stackcheck off
\
\ Default value is OFF
variable stackcheck stackcheck off
: check-stack ( -- ) ( rs: next-acf expected-depth bogus-acf -- )
r> drop depth r> =
if ['] ; compile,
else error-output ??cr
rp0 @ rp@ [ also hidden ] (rstrace [ previous ]
restore-output d# -334 throw
then ;
variable checker \ Dummy variable, to hold acf of check-stack
' check-stack checker !
: pcomp ( pstr1 pstr2 -- n ) \ 0 if the same
count rot count ( addr2 len2 addr1 len1 )
rot max comp ;
: read-stack ( -- +-depth )
0
begin blword p" --" pcomp
while 1-
repeat
begin blword p" )" pcomp
while 1+
repeat ;
alias old-(s (s
\ At compile time, count stack items in the comment for expected offset
\ At run time, push current-depth +-offset onto rs:, then push check-acf
: (s \ stack-in -- stack-out ) ( -- )
( rs: -- proper-depth check-acf )
stackcheck @
if postpone depth
read-stack do-literal
postpone + postpone >r
checker do-literal postpone >r
else postpone old-(s
then ; immediate